#include "PCFG.h"
#include <chrono>
#include <fstream>
#include "md501.h"
#include <iomanip>
using namespace std;
using namespace chrono;

// 编译指令如下：
// g++ correctness.cpp train.cpp guessing.cpp md5.cpp -o test.exe
// ./test.exe

// 通过这个函数，你可以验证你实现的SIMD哈希函数的正确性
int main()
{
    // bit32 state[4];
    // MD5Hash("bvaisdbjasdkafkasdfnavkjnakdjfejfanjsdnfkajdfkajdfjkwanfdjaknsvjkanbjbjadfajwefajksdfakdnsvjadfasjdvabvaisdbjasdkafkasdfnavkjnakdjfejfanjsdnfkajdfkajdfjkwanfdjaknsvjkanbjbjadfajwefajksdfakdnsvjadfasjdvabvaisdbjasdkafkasdfnavkjnakdjfejfanjsdnfkajdfkajdfjkwanfdjaknsvjkanbjbjadfajwefajksdfakdnsvjadfasjdvabvaisdbjasdkafkasdfnavkjnakdjfejfanjsdnfkajdfkajdfjkwanfdjaknsvjkanbjbjadfajwefajksdfakdnsvjadfasjdva", state);
    //  for (int i1 = 0; i1 < 4; i1 += 1)
    //  {
    //      cout << std::setw(8) << std::setfill('0') << hex << state[i1];
    //  }
    //  cout << endl;
    string str[4] = {"saf", "faerwf", "cawer", "CASD"};
    bit32 state[4];
    for (int i = 0; i < 4; i++)
    {
        MD5Hash(str[i], state);
        for (int i1 = 0; i1 < 4; i1 += 1)
        {
            cout << std::setw(8) << std::setfill('0') << hex << state[i1];
        }
        cout << endl;
    }

    const string str[4]={"saf", "faerwf", "cawer", "CASD"};
    bit32 states2[4][4];
    MD5Hash(str, states2);
    cout << "并行结果2:" << endl;
    for (int i = 0; i < 4; i++)
    {
        for (int i1 = 0; i1 < 4; i1 += 1)
        {
           cout << std::setw(8) << std::setfill('0') << hex << states2[i][i1];
        }
        cout << endl;
    }
}